﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using ECOSYSTEM_Dominio;

namespace ECOSYSTEM_DAL
{
    public class RegistroCompraDAL
    {
        SqlConnection cnn;
        Int32 codRegCompra;
        public Int32 guardarRegistroCompra(RegistroCompra elRegCompra)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("RegistrarRegistroCompra", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@RegCompraID", SqlDbType.Int);
                cmd.Parameters["@RegCompraID"].Direction = ParameterDirection.InputOutput;
                cmd.Parameters.Add("@NroRegCompra", SqlDbType.NVarChar, 15);
                cmd.Parameters.Add("@TComprobante", SqlDbType.NVarChar, 10);
                cmd.Parameters.Add("@FecRegistro", SqlDbType.NVarChar, 12);
                cmd.Parameters.Add("@Moneda", SqlDbType.NVarChar, 10);
                cmd.Parameters.Add("@TCambio", SqlDbType.NVarChar,10);
                cmd.Parameters.Add("@SubTotal", SqlDbType.Float);
                cmd.Parameters.Add("@IGV", SqlDbType.Float);
                cmd.Parameters.Add("@Total", SqlDbType.Float);
                cmd.Parameters.Add("@CodTrans", SqlDbType.Int);
                cmd.Parameters.Add("@CostoTrans", SqlDbType.Float);
                cmd.Parameters.Add("@CodEmpreProv", SqlDbType.Int);
                cmd.Parameters.Add("@CiudadProv", SqlDbType.NVarChar, 15);

                cmd.Parameters["@RegCompraID"].Value = elRegCompra.RegistroCompraID;
                cmd.Parameters["@NroRegCompra"].Value = elRegCompra.NroRegCompra;
                cmd.Parameters["@TComprobante"].Value = elRegCompra.TipoComprobante;
                cmd.Parameters["@FecRegistro"].Value = elRegCompra.FecRegComprobante;
                cmd.Parameters["@Moneda"].Value = elRegCompra.MonedaComprobante;
                cmd.Parameters["@TCambio"].Value = elRegCompra.TCambioComprobante;
                cmd.Parameters["@SubTotal"].Value = elRegCompra.SubTotalComprobante;
                cmd.Parameters["@IGV"].Value = elRegCompra.IGVComprobante;
                cmd.Parameters["@Total"].Value = elRegCompra.TotalComprobante;
                cmd.Parameters["@CodTrans"].Value = elRegCompra.ElTransportista;
                cmd.Parameters["@CostoTrans"].Value = elRegCompra.CostoTrans;
                cmd.Parameters["@CodEmpreProv"].Value = elRegCompra.LaEmpreProv;
                cmd.Parameters["@CiudadProv"].Value = elRegCompra.ProvCiudad;
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    codRegCompra = Convert.ToInt32(dr["CodigoRegCompra"]);
                }
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return codRegCompra;
        }
        public Boolean ActualizarRegistroCompra(RegistroCompra elRegCompra, Int32 CodigoRegistroCompra)
        {
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ActualizarRegistroCompra", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@RegCompraID", SqlDbType.Int);
                cmd.Parameters.Add("@NroRegCompra", SqlDbType.NVarChar, 15);
                cmd.Parameters.Add("@TComprobante", SqlDbType.NVarChar, 10);
                cmd.Parameters.Add("@FecRegistro", SqlDbType.NVarChar, 12);
                cmd.Parameters.Add("@Moneda", SqlDbType.NVarChar, 10);
                cmd.Parameters.Add("@TCambio", SqlDbType.NVarChar,10);
                cmd.Parameters.Add("@SubTotal", SqlDbType.Float);
                cmd.Parameters.Add("@IGV", SqlDbType.Float);
                cmd.Parameters.Add("@Total", SqlDbType.Float);
                cmd.Parameters.Add("@CodTrans", SqlDbType.Int);
                cmd.Parameters.Add("@CostoTrans", SqlDbType.Float);
                cmd.Parameters.Add("@CodEmpreProv", SqlDbType.Int);
                cmd.Parameters.Add("@CiudadProv", SqlDbType.NVarChar, 15);

                cmd.Parameters["@RegCompraID"].Value = CodigoRegistroCompra;
                cmd.Parameters["@NroRegCompra"].Value = elRegCompra.NroRegCompra;
                cmd.Parameters["@TComprobante"].Value = elRegCompra.TipoComprobante;
                cmd.Parameters["@FecRegistro"].Value = elRegCompra.FecRegComprobante;
                cmd.Parameters["@Moneda"].Value = elRegCompra.MonedaComprobante;
                cmd.Parameters["@TCambio"].Value = elRegCompra.TCambioComprobante;
                cmd.Parameters["@SubTotal"].Value = elRegCompra.SubTotalComprobante;
                cmd.Parameters["@IGV"].Value = elRegCompra.IGVComprobante;
                cmd.Parameters["@Total"].Value = elRegCompra.TotalComprobante;
                cmd.Parameters["@CodTrans"].Value = elRegCompra.ElTransportista;
                cmd.Parameters["@CostoTrans"].Value = elRegCompra.CostoTrans;
                cmd.Parameters["@CodEmpreProv"].Value = elRegCompra.LaEmpreProv;
                cmd.Parameters["@CiudadProv"].Value = elRegCompra.ProvCiudad;
                cmd.ExecuteNonQuery();
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return true;
        }
        public DataTable ObtenerListaRegCompra()
        {
            DataTable lista = null;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlDataAdapter da = new SqlDataAdapter("ObtenerListaRegCompra", cnn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                lista = new DataTable();
                da.Fill(lista);
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return lista;
        }
        public DataTable ObtenerListaRegCompraPorFecha(String FecReg)
        {
            DataTable lista = null;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlDataAdapter da = new SqlDataAdapter("ObtenerListaRegCompraPorFecha", cnn);
                da.SelectCommand.CommandType = CommandType.StoredProcedure;
                da.SelectCommand.Parameters.AddWithValue("Fecha", FecReg);
                lista = new DataTable();
                da.Fill(lista);
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
            return lista;
        }
        public List<DetalleComprobante> ObtenerDetalleRegistroCompra(Int32 NroRegistro)
        {
            List<DetalleComprobante> lista;
            try
            {
                cnn = (SqlConnection)ConexionSQL.getInstancia().getConexion();
                cnn.Open();
                SqlCommand cmd = new SqlCommand("ObtenerHistorialAlmacen", cnn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("RegCompraID", NroRegistro);
                lista = new List<DetalleComprobante>();
                SqlDataReader dr = cmd.ExecuteReader();
                while (dr.Read())
                {
                    DetalleComprobante elDetaCompro = new DetalleComprobante();
                    elDetaCompro.Producto = dr["Producto"].ToString();
                    elDetaCompro.Cantidad = Convert.ToInt32(dr["Cantidad"]);
                    elDetaCompro.PrecioCompra = Convert.ToDouble(dr["PrecCompra"]);
                    elDetaCompro.Utilidad = Convert.ToInt32(dr["Utilidad"]);
                    elDetaCompro.Precioventa = Convert.ToDouble(dr["PrecioVenta"]);
                    elDetaCompro.CodProd = Convert.ToInt32(dr["CodProd"]);
                    elDetaCompro.CodHisAlmacen = Convert.ToInt32(dr["CodHisAlmacen"]);
                    lista.Add(elDetaCompro);
                }
                return lista;
            }
            catch (SqlException ex) { throw new Exception(ex.Message); }
            catch (Exception e) { throw new Exception(e.Message); }
            finally
            {
                if (cnn.State == ConnectionState.Open)
                {
                    cnn.Close();
                }
            }
        }
    }
}
